这道题应该属于经典的”去重”系列里的吧. 很基础, 本不需要说什么, 但后来看了 Discuss 之后, 发现大家还关注内存回收的问题. 删去的节点, 应该被 delete. 这是对的. 我开始却给自动忽略了.

这造成的问题就是, 测试主函数中, 每一个节点必须要 new 出来, 而不能仅仅像以前一样, 声明一个局部对象. (当然, 这样做就是为了避免回收内存, 图简单.) 否则你 delete 的时候必然会造成内存错误的.


果然是 Easy 题,不知道为何通过率却还算靠后.

struct ListNode {
  int val;
  ListNode *next;
  ListNode(int x) : val(x), next(NULL) {}
};

class Solution {
public:
  ListNode *deleteDuplicates(ListNode *head) {
    for (ListNode *cur = head; cur && cur->next; )
    {
      if (cur->val == cur->next->val) 
      {
        ListNode *del = cur->next;
        cur->next = del->next;
        delete del;
      }
      else cur = cur->next;
    }    
    return head;
  }
};

LeetCode Direct Link